//
//  WelcomeViewController.swift
//  wobo
//
//  Created by 杨博宇 on 16/3/14.
//  Copyright © 2016年 杨博宇. All rights reserved.
//

import UIKit
import SnapKit
import SDWebImage

/*
自动布局的页面在执行动画效果时需要注意
1.需要在viewdidAppear方法中执行动画的效果的代码
2.在自动布局的页面 不能够直接修改frame 来改变视图的位置  -> 自动布局的页面视图是有 frame的
2.1.自动布局的页面的子视图的frame 是在 viewDidlayoutSubViews 方法中 确定的视图的frame
3.自动布局系统的会在 viewWillLayoutSubViews生命周期方法之前 '收集' 约束
4.如果希望更新的约束能够提前展示动画效果的运动轨迹,需要在更新完约束之后 强制刷新动画,提前布局页面
5.必须将 提前刷新的方法 放在动画闭包中执行

*/

class WelcomeViewController: UIViewController {
    
    override func loadView() {
        //大小会自动设置
        view = backImageView
    }

    override func viewDidLoad() {
        super.viewDidLoad()

        //设置UI
        setupUI()
    }

    //设置UI
    private func setupUI() {
    
        view.addSubview(iconImageView)
        view.addSubview(welcomeLabel)
        
        iconImageView.snp_makeConstraints { (make) -> Void in
            make.centerX.equalTo(view.snp_centerX)
            make.bottom.equalTo(view.snp_bottom).offset(-180)
            //设置图片约束的大小
            make.height.equalTo(90)
            make.width.equalTo(90)
        }
        welcomeLabel.snp_makeConstraints { (make) -> Void in
            make.top.equalTo(iconImageView.snp_bottom).offset(16)
            make.centerX.equalTo(iconImageView.snp_centerX)
        }
        
        //设置图片---sd是磁盘缓存，存到了本地，afn是内存缓存，再次加载仍须重新调用
        iconImageView.sd_setImageWithURL(UserAccount.shareAccount.headImageURL)
        
        //设置layer相关的属性，设置圆
        iconImageView.layer.cornerRadius = 45
        iconImageView.layer.masksToBounds = true
        iconImageView.layer.borderWidth = 3
        iconImageView.layer.borderColor = UIColor.purpleColor().CGColor
//
//        welcomeLabel.alpha = 0
    }
    
    override func viewDidAppear(animated: Bool) {
        super.viewDidAppear(animated)
        startAnimation()
    }
    
    
    private func startAnimation() {
        //1.在动画闭包中 更新约束  snp_updateConstraints: 如果该约束 已经存在 就更新约束 ,如果不存在就创建约束
        //usingSpringWithDamping: 弹簧系数  0 ~ 1  越小越弹
        //initialSpringVelocity: 加速度 9.8  重力加速度  如果希望弹簧动画效果比较好 一般设置范围 弹簧系数 * 10 ~= 加速度
        //options: 动画的可选项  枚举  OC:  位移枚举  '|'  , swift中 使用数组表示多个枚举选项
        let offsetY = -UIScreen.mainScreen().bounds.height + 180
        
        //自动布局系统在这个阶段并没有修改视图的frame  这个阶段只是收集了 约束的变化
        self.iconImageView.snp_updateConstraints { (make) -> Void in
            make.bottom.equalTo(self.view.snp_bottom).offset(offsetY)
        }
        
        UIView.animateWithDuration(1.5, delay: 0, usingSpringWithDamping: 0.95, initialSpringVelocity: 9.8, options: [], animations: { () -> Void in
            //2. 强制刷新页面  layoutIfNeeded  这一段代码必须在动画闭包中执行
            self.view.layoutIfNeeded()
            }) { (_) -> Void in
                //
                UIView.animateWithDuration(0.5, animations: { () -> Void in
                    self.welcomeLabel.alpha = 1
                    }, completion: { (_) -> Void in
                        print("👌")
                        //切换根视图控制器
                        //广告页面, 新特性页面  后期根视图控制器的切换不好维护
//                        UIApplication.sharedApplication().keyWindow?.rootViewController = MainViewController()
                        //object: 通知额外附带的对象
                        NSNotificationCenter.defaultCenter().postNotificationName(SwitchRootViewController, object: nil)
                })
        }
    }

    
    
    //创建按钮，懒加载子视图
    private lazy var backImageView = UIImageView(image: UIImage(named: "ad_background"))
    private lazy var iconImageView = UIImageView(image: UIImage(named: "avatar_default_big"))
//    private lazy var welcomeLabel: UILabel = UILabel.labelWith( (UserAccount.shareAccount.name ?? "") + "  欢迎归来", textColor: UIColor.darkGrayColor(), fontSize: 16)
    
    
    private lazy var welcomeLabel: UILabel = {
        let l = UILabel()
        
        //设置文字
        l.text = (UserAccount.shareAccount.name ?? "") + "   欢迎归来"
        l.font = UIFont.systemFontOfSize(16)
        l.textColor = UIColor.darkGrayColor()
        l.alpha = 0
        l.sizeToFit()
        return l
    }()
}
